<html>
<head>
<link rel="stylesheet" href="page.css" type="text/css">
<title>Goals and Approach</title>
</head>
<body bgcolor=#ffffff link=#990033 vlink=#990033 alink=#990033 text=#000000>

<!---- TOPIC TITLE WITH LOGO--->
<table border=0 cellpadding= cellspacing=2 width=100% ><tr><td><a href='http://www.fox-toolkit.org' target=_top><img src='art/foxlogo_small.jpg' border=0></a></td><td width=100% valign=bottom id="HEADLINE"><b>
Goals and Approach  <A href='goals.html' target="_top" align=left><font  size=-2>[Remove Frame]</font></a>
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE WITH LOGO --->

<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Goals
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->

<ul>
  Developing a single application for multiple platforms
  is a difficult task.&nbsp; The most significant issue is the need for a
  clean solution for developing Graphical User Interfaces [GUI's].&nbsp;&nbsp;
  FOX aims to address this by providing a single GUI library that can run
  on different computer hardware and operating system environments.&nbsp;
  The benefits to application vendors and developers are clear:
  <BR>&nbsp;
  <OL>
  <LI>
  <B>Development effort to support multiple environments
  is substantially reduced.</B>&nbsp; After development, your FOX based application
  is only a compile away from running on other operating systems.&nbsp; When
  multiple hardware and software combinations are required by customers operating
  in a heterogeneous environment, using a single GUI system such as FOX is
  clearly the most cost-effective method to achieve the goal.</LI>

  <BR>&nbsp;
  <LI>
  <B>Availability of your software on other platforms
  will engender additional revenues.&nbsp;&nbsp;</B> Without the necessity
  of additional development&nbsp; work, the cost of&nbsp; which would have
  to be amortized over the number of sales, additional revenues can be engendered
  by having your software be available on multiple hardware and software
  environments.&nbsp; Software development is a costly undertaking; because
  of this, software vendors typically limit the number of platforms to a
  small subset of the platforms being used by <I>all</I> customers, effectively
  leaving certain customers in the dark.&nbsp; FOX allows applications to
  be developed on one platform, then simply recompile the application on
  a number of other hardware/software systems.&nbsp; Because the cost of
  doing so is negligible, this approach will be able to generate positive
  cashflow even with low sales volumes.</LI>

  <BR>&nbsp;
  <LI>
  <B>Captive audience.</B>&nbsp; If the application
  you're developing is available on all platforms, you may be able to create
  a captive customer base on hardware/software systems where your competitor
  is absent; you may in fact even be able to charge premium prices.&nbsp;
  Using the additional revenues derived from these customers, your product
  will be able to derive a steady addional revenue stream which will allow
  you to compete more aggressively against your single-platform competitor.</LI>

  <BR>&nbsp;
  <LI>
  <B>Higher Quality.</B> For programmers, the benefits
  of multi-platform development v.s. single platform development are the
  additional confidence and code quality that compiling under different environments
  will give.&nbsp; For example, I have compiled FOX on a number of different
  systems, and different compilers will discover different types of code
  bugs.&nbsp; By compiling on all these different systems, FOX has gotten
  quite a bit better in the course of time.<BR>
  <BR></LI>

  <LI>
  <B>Control Your Destiny.</B>&nbsp; Programmers understand
  it as a matter of course that they need to continually work to track the
  changes in a system's API's.&nbsp; But what if the system vendor is also
  your competitor?&nbsp; In such a case, you <B><I><U>will</U></I></B> loose,
  sooner or later.&nbsp; The FOX GUI Library provides a platform-independent
  escape hatch that relies only on core system facilities which can be expected
  to be present on any modern operating system.</LI>
  </OL>

</ul>

<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Approach
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->

<ul>

  FOX attains the goal of platform independence
  by eliminating all&nbsp; system dependencies from its public interfaces.&nbsp;
  In fact, a typical FOX application may not even need to include any system-specific
  header files at all!&nbsp; By not including e.g. X-Windows header files,
  applications can not even accidentally slip up and introduce platform dependencies.
  This strategy is also carried out inside FOX itself.&nbsp; Thus, large
  parts of FOX are in fact defined entirely in FOX itself.&nbsp; The only
  dependencies are concentrated in a few select base classes where this couldn't
  be avoided.
  <P>The following salient points highlight some fundamental
  benefits of FOX <I>vis-a-vis</I> other purported platform independent toolkits:
  <BR>&nbsp;
  <OL>
  <LI>
  <B>Eliminate all platform specific header files</B>.&nbsp;
  Applications should only include header files from FOX, and a few header
  files for such basic system services as opening files etc.</LI>

  <BR>&nbsp;
  <LI>
  <B>Internal Layering. </B>FOX itself relies largely
  on FOX base classes, and therefore a large fraction of FOX itself is platform
  independent as well.</LI>

  <BR>&nbsp;
  <LI>
  <B>Rely only on low-level system facilities.
  </B>FOX
  relies only on core system facilities, and does NOT wrap native GUI libraries
  or toolkits.&nbsp; This has the following benefits:</LI>

  <BR>&nbsp;
  <UL>
  <LI>
  <B>Identical behaviour.</B> The behaviour will be
  close to identical on all systems, as the behaviour is completely controlled
  by the FOX implementation, rather than some underlying library.</LI>

  <BR>&nbsp;
  <LI>
  <B>Identical looks. </B>FOX applications will look
  the same no matter what system you're running it on.</LI>

  <BR>&nbsp;
  <LI>
  <B>Ability to <I>subclass</I>.</B>&nbsp;
  Because FOX is written from the ground up in C++, and is NOT a C++ wrapper
  around some other legacy toolkit or library, FOX Controls may be subclassed
  and extended by application programmers.&nbsp; Moreover, if these additions
  can be done by calling upon FOX built-in facilities, those additions will
  be platform independent also.</LI>

  <BR>&nbsp;
  <LI>
  <B>Higher Quality.</B> It is a given in software development that those
  facilities which are most frequently used are the ones which are most stable.&nbsp;
  Thus, by using core system facilities instead of higher-level transient
  API's, the impact of the underlying system's instability is minimized.&nbsp;
  A chain is as strong as the weakest link, and while I can not control the
  quality of the links, I can minimize the number of them.</LI>

  <BR>&nbsp;
  <LI>
  <B>Higher Speed.</B> Eliminating layers between
  FOX and the underlying system not only increases the application's quality,
  it will also make it faster, and reduce memory overhead.</LI>

  <BR>&nbsp;
  <LI>
  <B>Go to the Bedrock.</B> FOX's core facilities needed
  from the target system are things like mouse/keyboard event handling, and
  basic graphics facilities such as drawing of lines and rectangles [and
  some other system facilities].&nbsp; In most operating systems, these are
  fairly mature API's and not subject to much change.&nbsp; If you want to
  build a big building, you need to go down to the solid bedrock.&nbsp; This
  is what FOX does.</LI>

  <BR>&nbsp;</UL>

  <LI>
  <B>FOX is extensible.</B>&nbsp; The FOX library is designed to be open-ended
  and extensible. What this means is that unlike other libraries which take
  the approach of wrapping legacy GUI toolkits, FOX may be extended with
  <I>Custom
  Controls</I> and Widgets which will set your application apart from the
  others.&nbsp; Building Custom Controls is extremely easy in FOX, as it
  is essentially just a matter of C++ subclassing.</LI>

  <BR>&nbsp;
  <LI>
  <B>FOX is available under Library GNU Public License.
  </B>Since
  FOX is distributed in source form under LGPL, you have the ability to make
  changes or extensions to FOX to suit your needs.&nbsp; Having FOX inspected
  by 1000's of programmers all over the world will iron out any bugs it may
  have very quickly.&nbsp; This process is already under way.</LI>
  </OL><p>
  I care a great deal about software quality; I imagine,
  so do you.&nbsp; In the course of my programming life, I have ran into
  many situations where the bugs I needed to fix were not in my own code,
  but in someone else's, and of course I didn't have the source.&nbsp; Thus,
  the quality of my own software was limited by the quality of someone else's.&nbsp;
  Problem is, the developers of the libraries and software I depend on are
  frequently not motivated to make their software correct.
  <P>This has made me a firm believer in the <I>GPL</I>
  or <I>Open Source</I> model of software development. FOX was started in
  part because I didn't want to explain to our customers that the reason
  X or Y didn't work was because of the broken software or libraries on their
  machine.&nbsp; The only way one can create high-quality applications is
  to bring as much of the underlying system under one's control as possible.&nbsp;
  Hence the <I>Go to the Bedrock </I>philosophy.
  <P>FOX is not perfect.&nbsp; But as the source code
  is available under LGPL,&nbsp; it has the advantage that its imperfections
  can be addressed as soon as they are discovered.
  <BR>


</ul>

<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Why Windows?
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->

<ul>

  Some people may argue that porting FOX to Windows ``helps'' Microsoft.&nbsp;
  It doesn't.&nbsp; Porting FOX to Windows <I>does</I> however help <I>application
  vendors</I>:- instead of subjugating to a proprietary lock-in GUI environment,
  they can now ship their application on a large variety of platforms, like
  LINUX, and this with little or no additional effort, and derive additional
  revenues.
  <P>In addition, being distributed under <a href="http://www.gnu.org">LGPL</a>,
  it lowers costs, and does
  not incur any license fees for distribution.&nbsp;&nbsp; Being distributed
  under LGPL also has the concomittant benefit that a large number of people
  may inspect the source code, and spot its inevitable deficiencies; thus,
  more bugs are found and they are found more quickly.&nbsp; Remember, the
  person which is the most motivated to fix a bug is the one bitten by it;
  under the <a href="http://www.opensource.org">Open Source development model</a>,
  this person can actually localize, and possibly fix the bug himself, and
  <A HREF="mailto:foxgui-users@lists.sourceforge.net">contribute</A> those changes to the library.

  <P>Finally, I believe application developers will find the FOX library
  a more attractive alternative.&nbsp; For a software developer, the FOX
  Library is far more easy to learn, and offers some unique benefits, such
  as tying Widgets [Controls] together with little effort, being able to
  subclass from existing Widgets to make custom ones, and last but not least
  the ability to modify FOX's source code itself if necessary.&nbsp; FOX
  represents what I consider to be the ideal GUI Library; I wrote FOX to
  use it myself!

</ul>


<!--- COPYRIGHT -->
<p>
<table width=100% cellpadding=0 cellspacing=0><tr><td width=100% valign=top id=HEADLINE align=right>
<img src='art/line.gif' width=100% height=1><font size=-1>
Copyright &copy; 1997-2005 Jeroen van der Zijp</font>
</td></tr></table>
</p>
<!--- COPYRIGHT -->
</body>
</html>
